﻿/*
密钥加密 
Time Limit:1000MS  Memory Limit:32768K


Description:
密钥加密是将密钥数字串值循环加到明文（需要加密的文字串）上，使得明文变形而不可阅读，变形后的文字串称为密文。

例如，密钥为4972863，明文为“the result of 3 and 2 is not 8”，则循环加密的过程及结果为：

 

明 文
 t
 h
 e
  
 r
 e
 s
 u
 l
 t
  
 o
 f
  
 3
  
 a
 n
 d
  
 2
  
 i
 s
  
 n
 o
 t
  
 8
 
ASCII
 116
 104
 101
 32
 114
 101
 115
 117
 108
 116
 32
 111
 102
 32
 51
 32
 97
 110
 100
 32
 50
 32
 105
 115
 32
 110
 111
 116
 32
 56
 
+循环值
 4
 9
 7
 2
 8
 6
 3
 4
 9
 7
 2
 8
 6
 3
 4
 9
 7
 2
 8
 6
 3
 4
 9
 7
 2
 8
 6
 3
 4
 9
 
ASCII
 120
 113
 108
 34
 122
 107
 118
 121
 117
 32
 34
 119
 108
 35
 55
 41
 104
 112
 108
 38
 53
 36
 114
 122
 34
 118
 117
 119
 36
 65
 
密 文
 x
 q
 l
 "
 z
 k
 v
 y
 u
  
 "
 w
 l
 #
 7
 )
 h
 p
 l
 &
 5
 $
 r
 z
 "
 v
 u
 w
 $
 A
 

 

即密文为：

xql"zkvyu "wl#7)hpl&5$rz"vuw$A

这里的密钥加密是循环加密，并且在ASCII码值32(’ ’)到122(’z’)之间做模运算，超过了122的值便依次回跳到32,33,...等值。
例如，’t’+7＝116+7＝123＝122+1，其值超过122一个位置，因此回跳到值32。
显然，密文也全部是由可见字符所组成。


Input:
输入数据中含有若干组数据，每组数据由密钥和明文组成，密钥和明文均单独占一行。每组数据之间没有空行。 
Output:
对于每组数据，对应输出一行密文。 
Sample Input:
4972863
the result of 3 and 2 is not 8
123
Hello World
Sample Output:
xql"zkvyu "wl#7)hpl&5$rz"vuw$A
Igomq#Xqumf
*/
#include <stdio.h>
char* encrypt(char* code, char* key)
{
	char* p = code, * q = key;
	for (; *p; p++, q++)
	{
		if ('\0' == *q)
			q = key;
		*p = char((*p - 32 + *q - '0') % 91 + 32);
	}
	return code;
}
#define MAX_CHARS 32767
int main(int argc, char* argv[])
{
	char code[MAX_CHARS] = {0}, key[MAX_CHARS] = {0};

	while (gets(key) && gets(code))
	{
		puts(encrypt(code, key));
	}

	return 0;
}